﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;


namespace Maestro_Proveedores.herramientas
{
    /// <summary>
    /// Enviar mails desde la aplicacion
    /// </summary>
    public class SendMail
    {        
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Destinatario</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string to, string from, string fromName, string subject, string body, bool bodyHTML)
        {           
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establece el destinatario
                msg.To.Add(to);                
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;                
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Destinatario</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="adjunto">Ruta completa del archivo que se desea adjuntar al mail</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string to, string from, string fromName, string subject, string body, string adjunto, bool bodyHTML)
        {
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establecen los destinatarios
                msg.To.Add(to);
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;
                //Se adjunta el archivo
                Attachment data = new Attachment(adjunto, MediaTypeNames.Application.Octet);
                ContentDisposition disposition = data.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(adjunto);
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(adjunto);
                disposition.ReadDate = System.IO.File.GetLastAccessTime(adjunto);
                msg.Attachments.Add(data);
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Destinatario</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="adjunto">Colección con las rutas completas de los archivos que se desean adjuntar al mail</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string to, string from, string fromName, string subject, string body, string[] adjunto, bool bodyHTML)
        {
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establecen los destinatarios                
                msg.To.Add(to);
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;
                //Se adjuntan los archivos
                foreach (string adj in adjunto)
                {
                    Attachment data = new Attachment(adj, MediaTypeNames.Application.Octet);
                    ContentDisposition disposition = data.ContentDisposition;
                    disposition.CreationDate = System.IO.File.GetCreationTime(adj);
                    disposition.ModificationDate = System.IO.File.GetLastWriteTime(adj);
                    disposition.ReadDate = System.IO.File.GetLastAccessTime(adj);
                    msg.Attachments.Add(data);
                }
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Coleccion con los destinatarios</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="adjunto">Ruta completa del archivo que se desea adjuntar al mail</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string[] to, string from, string fromName, string subject, string body, bool bodyHTML)
        {
            //System.Windows.Forms.MessageBox.Show(to[0] + "\n" + from + "\n" + fromName + "\n" + subject + "\n" + bodyHTML);
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establecen los destinatarios
                foreach (string t in to)
                    msg.To.Add(t);
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;                
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Coleccion con los destinatarios</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="adjunto">Colección con las rutas completas de los archivos que se desean adjuntar al mail</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string[] to, string from, string fromName, string subject, string body, string[] adjuntos, bool bodyHTML)
        {
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establecen los destinatarios
                foreach (string t in to)
                    msg.To.Add(t);
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;
                //Se adjuntan los archivos
                foreach (string adj in adjuntos)
                {
                    Attachment data = new Attachment(adj, MediaTypeNames.Application.Octet);
                    ContentDisposition disposition = data.ContentDisposition;
                    disposition.CreationDate = System.IO.File.GetCreationTime(adj);
                    disposition.ModificationDate = System.IO.File.GetLastWriteTime(adj);
                    disposition.ReadDate = System.IO.File.GetLastAccessTime(adj);
                    msg.Attachments.Add(data);
                }
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Coleccion con los destinatarios</param>
        /// <param name="CC">Coleccion con los destinatarios a los que se les enviara una copia del mail</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string[] to, string[] CC, string from, string fromName, string subject, string body, bool bodyHTML)
        {
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establecen los destinatarios
                foreach (string t in to)
                    msg.To.Add(t);
                //Se establecen los destinatarios CC
                foreach (string c in CC)
                    msg.CC.Add(c);
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Coleccion con los destinatarios</param>
        /// <param name="CC">Coleccion con los destinatarios a los que se les enviara una copia del mail</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="adjunto">Colección con las rutas completas de los archivos que se desean adjuntar al mail</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string[] to, string[] CC, string from, string fromName, string subject, string body, string[] adjuntos, bool bodyHTML)
        {
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establecen los destinatarios
                foreach (string t in to)
                    msg.To.Add(t);
                //Se establecen los destinatarios CC
                foreach (string c in CC)
                    msg.CC.Add(c);
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;
                //Se adjuntan los archivos
                foreach (string adj in adjuntos)
                {
                    Attachment data = new Attachment(adj, MediaTypeNames.Application.Octet);
                    ContentDisposition disposition = data.ContentDisposition;
                    disposition.CreationDate = System.IO.File.GetCreationTime(adj);
                    disposition.ModificationDate = System.IO.File.GetLastWriteTime(adj);
                    disposition.ReadDate = System.IO.File.GetLastAccessTime(adj);
                    msg.Attachments.Add(data);
                }
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Coleccion con los destinatarios</param>
        /// <param name="CC">Coleccion con los destinatarios a los que se les enviara una copia del mail</param>
        /// <param name="BCC">Coleccion con los destinatarios a los que se les enviara una copia oculta del mail</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string[] to, string[] CC, string[] BCC, string from, string fromName, string subject, string body, bool bodyHTML)
        {
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establecen los destinatarios
                foreach (string t in to)
                    msg.To.Add(t);
                //Se establecen los destinatarios CC
                foreach (string c in CC)
                    msg.CC.Add(c);
                //Se establecen los destinatarios CC
                foreach (string bc in BCC)
                    msg.Bcc.Add(bc);
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }
        /// <summary>
        /// Enviar E-Mail.
        /// </summary>
        /// <param name="to">Coleccion con los destinatarios</param>
        /// <param name="CC">Coleccion con los destinatarios a los que se les enviara una copia del mail</param>
        /// <param name="BCC">Coleccion con los destinatarios a los que se les enviara una copia oculta del mail</param>
        /// <param name="from">Remitente</param>
        /// <param name="fromName">Nombre del remitente</param>
        /// <param name="subject">Asunto del mail</param>
        /// <param name="body">Cuerpo del mensaje</param>
        /// <param name="adjunto">Colección con las rutas completas de los archivos que se desean adjuntar al mail</param>
        /// <param name="bodyHTML">¿Cuerpo del mensaje en formato HTML?</param>
        /// <returns></returns>
        public static bool send(string[] to, string[] CC, string[] BCC, string from, string fromName, string subject, string body, string[] adjuntos, bool bodyHTML)
        {
            try
            {
                //Se prepara un nuevo mensaje
                System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
                //Se establecen los destinatarios
                foreach (string t in to)
                    msg.To.Add(t);
                //Se establecen los destinatarios CC
                foreach (string c in CC)
                    msg.CC.Add(c);
                //Se establecen los destinatarios CC
                foreach (string bc in BCC)
                    msg.Bcc.Add(bc);
                //Se establece el remitente, asi como el nombre que aparecerá en la 
                //bandeja de entrada, así como el formato de codificación
                msg.From = new MailAddress(from, fromName, System.Text.Encoding.UTF8);
                //Se establece el asunto del mail
                msg.Subject = subject;
                //Formato de codificación del Asunto
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                //Se establece el cuerpo del mail
                msg.Body = body;
                //Se establece la codificación del Cuerpo
                msg.BodyEncoding = System.Text.Encoding.Unicode;
                //Se indica si al cuerpo del mail, se interpretara como código HTMl
                msg.IsBodyHtml = bodyHTML;
                //Se adjuntan los archivos
                foreach (string adj in adjuntos)
                {
                    Attachment data = new Attachment(adj, MediaTypeNames.Application.Octet);
                    ContentDisposition disposition = data.ContentDisposition;
                    disposition.CreationDate = System.IO.File.GetCreationTime(adj);
                    disposition.ModificationDate = System.IO.File.GetLastWriteTime(adj);
                    disposition.ReadDate = System.IO.File.GetLastAccessTime(adj);
                    msg.Attachments.Add(data);
                }
                //Se prepara el envio del mail
                SmtpClient clienteSMTP = new SmtpClient(ConfiguracionDelSistema.SMTPHost);
                //Se definen las credenciales del servidor SMTP
                clienteSMTP.Credentials = new System.Net.NetworkCredential();
                //Se establece el puerto de envio
                clienteSMTP.Port = 25;
                //Se envia el Mail
                clienteSMTP.Send(msg);
            }
            catch (Exception ex)
            {
                herramientas.MessageException.show(ex);
                return false;
            }
            return true;
        }     
    }
}
